package algorithm.middle;

import java.util.HashMap;

/**
 * @BelongsProject: LeetCode
 * @BelongsPackage: algorithm.middle
 * @Author: 江岸
 * @CreateTime: 2021-06-03 21:57
 * @Description: 给定一个二进制数组 nums , 找到含有相同数量的 0 和 1 的最长连续子数组，并返回该子数组的长度。
 */
public class FindMaxLength525 {
    public int findMaxLength(int[] nums) {
        //存放 数字和，第一次出现的index
        HashMap<Integer, Integer> map = new HashMap<>();
        int count = 0;
        int res = 0;
        map.put(0,-1);
        for (int i=0;i<nums.length;i++){
            //把0当作-1，count就为前缀和
            if (nums[i]==1){
                count++;
            }else {
                count--;
            }
            if (map.containsKey(count)){
                res = Math.max(i-map.get(count),res);
            }else {
                map.put(count,i);
            }
        }
        return res;
    }
}
